/**
 *
 */
if(typeof (module) !="undefined"){
    module.exports = TableObj;


    var PrintObj = require('./PrintObj');
    var TableTd = require('./TableTd');
    var Serializer = require('./Serializer');
    var CompoundPath = require('./../common/CompoundPath');
}



function TableObj() {
    PrintObj.call(this);

    this.row = 0; // row 行数
    this.col = 0; // column 列数
//    this.tds = new Array(); // 格子中数据数组（数组大小=row*col），可以是文字、图像、编组等的id
    // 格子线性存放，每个格子内容是TableTd对象或者TableTd.EMPTY_TALBE_TD

    // 前台临时使用，保存到后台时不需要使用
    this.cp = new CompoundPath(); // 图形轮廓


    this.ct = Serializer.prototype.CLASS_TYPE_TABLEOBJ;
}
TableObj.prototype = new PrintObj(); // 继承
// 转成json字符串
TableObj.prototype.toJson = function () {

    var superJson = PrintObj.prototype.toJson.call(this);
    superJson = superJson.substr(1, superJson.length - 2);

    var ret = '{';
    ret += superJson;
    ret += ',';
    ret += ('"row":' + '"' + this.row + '"');
    ret += ',';
    ret += ('"col":' + '"' + this.col + '"');
//    ret += ',';
//    ret += ('"tds":' + '[');
//
//    for (var m = 0; m < this.tds.length; m++) {
//        if (m > 0) {
//            ret += ',';
//        }
//
//        ret += (this.tds[m]).toJson();
//
//    }
//    ret += ']';

    // 记录表格轮廓
    {
        ret += ',';
        ret += ('"cp":' + this.cp.toJson());
    }

    // 添加自己id属性			
    ret += '}';
    return ret;
}

// 从json对象中解析出PointPath
TableObj.prototype.fromJson = function (jsonObj, versionId) {
    PrintObj.prototype.fromJson.call(this, jsonObj, versionId);

    this.row = jsonObj.row;
    this.col = jsonObj.col;

//    for (var m = 0; m < jsonObj.tds.length; m++) {
//        if (jsonObj.tds[m] == TableTd.EMPTY_TALBE_TD) {
//            this.tds.push(TableTd.EMPTY_TALBE_TD);
//        } else {
//            var tableTd = new TableTd();
//            tableTd.fromJson(jsonObj.tds[m], versionId);
//            this.tds.push(tableTd);
//        }
//    }

    // 记录表格轮廓
    this.cp.fromJson(jsonObj.cp, versionId);

}


/**
 * 将对象添加到PDF中
 * @param doc  PDFDocument结构
 * @param info  对象结构，属性如下：
 *                  docOriginX  文档的新原点 在原始原点的 坐标
 *                  docOriginY  文档的新原点 在原始原点的 坐标
 *                  clip        （在GraphObj对象中有效）true表示剪切蒙版，false表示普通对象
 */
TableObj.prototype.addToPdf = function (doc, info) {
    // 保存上下文环境
    Serializer.prototype.before.call(this, doc, info);

    // 描绘每个格子
//    var colW = this.w / this.col;
//    var rowH = this.h / this.row;
//    for (var i = 0; i < this.tds.length; i++) {
//        var td = this.tds[i];
//        td.addToPdf(doc, info, colW, rowH, parseInt(i % this.col), parseInt(i / this.col));
//    }

    // 描绘边框
    doc.strokeColor(this.strokeColor())
        .lineWidth(this.strokeWidth())
        .opacity(this.al);

    var svgPath = this.cp.toSvgPath();
    Serializer.prototype.drawSvgPath.call(this, doc, null, this.strokeColor(),
        this.strokeWidth(), this.lineCap(),this.lineJoin(),
        this.miterLimit(),this.al, svgPath);


    // 还原上下文环境
    Serializer.prototype.after.call(this, doc, info);
}

//// 取得子模板对象(返回subTemplateObj数组)
//TableObj.prototype.getSubTemplateObj = function (key) {
//    var ret = new Array();
//    for (var m = 0; m < this.tds.length; m++) {
//        var td = this.tds[m];
//        for (var i = 0; i < td.sub.length; i++) {
//            var subRet = td.sub[i].getSubTemplateObj(key);
//            for (var j = 0; j < subRet.length; j++) {
//                ret.push(subRet[j]);
//            }
//        }
//    }
//
//    return ret;
//}
//// 取得对象的叶节点
//TableObj.prototype.getLeafObjs = function () {
//    var ret = new Array();
//    for (var i = 0; i < this.tds.length; i++) {
//        var td = this.tds[i];
//        for (var m = 0; m < td.sub.length; m++) {
//            var o = td.sub[m];
//            var subRet = o.getLeafObjs();
//            if (subRet && subRet.length > 0) {
//                for (var n = 0; n < subRet.length; n++) {
//                    ret.push(subRet[n]);
//                }
//            }
//        }
//    }
//
//    return ret;
//}
